package dao;

import java.util.List;
import model.TipoPontoGastronomico;
import org.hibernate.Query;
import org.hibernate.Session;
import util.HibernateUtil;

/**
 *
 * @author Lucas S Bueno
 */
public class TipoPontoGastronomicoDAO implements BasicDAOInterface<TipoPontoGastronomico> {

   @Override
   public boolean salvar(TipoPontoGastronomico obj) {
      Session session = HibernateUtil.getSessionFactory().openSession();
      session.beginTransaction();

      try {
         session.save(obj);
         session.getTransaction().commit();
         session.disconnect();
      } catch (Exception e) {
         System.err.println("ERRO AO SALVAR TIPO DE PONTO GASTRONOMICO!\n" + e.getMessage());
         return false;
      }

      return true;
   }

   @Override
   public List<TipoPontoGastronomico> recuperar() {
      Session session = HibernateUtil.getSessionFactory().openSession();
      session.beginTransaction();
      List<TipoPontoGastronomico> tipos;

      try {
         tipos = session.createQuery("from TipoPontoGastronomico").list();
         session.getTransaction().commit();
      } catch (Exception e) {
         System.err.println("ERRO AO RECUPERAR TIPOS DE PONTO GASTRONOMICO!\n" + e.getMessage());
         return null;
      }

      return tipos;
   }

   @Override
   public TipoPontoGastronomico recuperar(int id) {
      Session session = HibernateUtil.getSessionFactory().openSession();
      session.beginTransaction();
      TipoPontoGastronomico tipo;

      try {
         Query consulta = session.createQuery("from TipoPontoGastronomico as tip where tip.id = :id");
         consulta.setInteger("id", id);
         tipo = (TipoPontoGastronomico) consulta.uniqueResult();
         session.getTransaction().commit();
      } catch (Exception e) {
         System.err.println("ERRO AO RECUPERAR TIPO DE PONTO GASTRONOMICO!\n" + e.getMessage());
         return null;
      }

      return tipo;
   }

   @Override
   public boolean atualizar(TipoPontoGastronomico obj) {
      Session session = HibernateUtil.getSessionFactory().openSession();
      session.beginTransaction();

      try {
         session.update(obj);
         session.getTransaction().commit();
         session.disconnect();
      } catch (Exception e) {
         System.err.println("ERRO AO ATUALIZAR TIPO DE PONTO GASTRONOMICO!\n" + e.getMessage());
         return false;
      }
      
      return true;
   }

   @Override
   public boolean deletar(TipoPontoGastronomico obj) {
      Session session = HibernateUtil.getSessionFactory().openSession();
      session.beginTransaction();
      
      try {
         session.delete(obj);
         session.getTransaction().commit();
         session.disconnect();
      } catch (Exception e) {
         System.err.println("ERRO AO DELETAR TIPO DE PONTO GASTRONOMICO!\n" + e.getMessage());
         return false;
      }
      
      return true;
   }
}
